package features.advance.leetcode.compete;

/**
 * @author LIN
 * @date 2021-05-21
 */
public class Compete1827 {

    public static void main(String[] args) {
        Solution solution = new Solution() {
            @Override
            public int minOperations(int[] nums) {
                int counts = 0;
                int length = nums.length;
                if(length == 1){
                    return 0;
                }
                for(int i =1; i < length ; i++){
                    if(nums[i]>nums[i-1]){
                        continue;
                    }
                    counts+=nums[i-1]+1-nums[i];
                    nums[i] = nums[i-1]+1;
                }
                return counts;
            }
        };
        int[] nums = {1,5,2,4,1};
        int res = solution.minOperations(nums);
        System.out.println(res);
    }


   static class Solution {
        /**
         *  解题思路
         *
         * 由于只需返回结果，所以不用对数组本身进行改变。
         * 使用curMax标记当前元素之前元素已经达到的值。如果遇上比其小的，应使其元素加到curMax+1，（并不用真的操作，只需统计所需的次数）。如果遇上比其大的，更新curMax即可。
         *
         * @param nums
         * @return
         */
        public int minOperations(int[] nums) {
            int res = 0;
            if(nums == null || nums.length == 0){
                return res;
            }
            int cur = nums[0];
            for(int i=1;i<nums.length;i++){
                if(cur >= nums[i]){
                    res+=cur - nums[i]+1;
                    cur++;
                }else{
                    cur = nums[i];
                }
            }
            return res;
        }
    }
}
